// package语句：声明当前类所在的包路径
// com.itheima.extends3modifier 表示当前类在extends3modifier包中
package com.itheima.extends3modifier;

// import语句：导入其他包中的类，让当前类可以使用这些类
// 这里导入了 com.itheima.extends2modifier 包中的 Fu 类
// 注意：Zi类和Fu类位于不同的包中！
import com.itheima.extends2modifier.Fu;

// public class Zi extends Fu：定义一个公共的类Zi，它继承自Fu类
// extends关键字表示继承关系，Zi是子类（派生类），Fu是父类（基类）
// 通过继承，Zi类可以使用Fu类中非private的成员
public class Zi extends Fu {
    // public void show()：定义一个公共的方法show，没有参数和返回值
    // 这个方法演示了子类在不同包中对父类成员的访问权限
    public void show(){
        // 这行被注释掉了，因为：
        // privateMethod()是Fu类中用private修饰的方法
        // private修饰的成员只能在自己的类中访问，即使是子类也不能访问
        // 无论是在同一个包还是不同包中，子类都无法访问父类的private成员
        // privateMethod();
        
        // 这行被注释掉了，因为：
        // method()是Fu类中没有访问修饰符的方法（默认/缺省修饰符）
        // 默认修饰符的成员只能在同一个包中访问
        // 而Zi类和Fu类在不同的包中，所以即使Zi是Fu的子类，也不能访问父类的默认修饰符成员
        // method();
        
        // 这行代码可以正常执行，因为：
        // protectedMethod()是Fu类中用protected修饰的方法
        // protected修饰的成员可以在自己的类中、同一个包中、以及子类中访问
        // 虽然Zi类和Fu类在不同的包中，但Zi是Fu的子类，所以可以访问父类的protected成员
        // 这是protected和默认修饰符的重要区别！
        protectedMethod();
        
        // 这行代码可以正常执行，因为：
        // publicMethod()是Fu类中用public修饰的方法
        // public修饰的成员可以被任何地方的代码访问，无论是否在同一个包中
        // 所以即使Zi类和Fu类在不同的包中，也可以访问父类的public成员
        publicMethod();
    }
}
